package studentinformationmanagementsystem.service.impl;

import studentinformationmanagementsystem.dao.*;
import studentinformationmanagementsystem.dao.impl.*;
import studentinformationmanagementsystem.entity.*;
import studentinformationmanagementsystem.service.TemporaryClassTableService;

import java.util.ArrayList;
import java.util.List;

/**
 * @author 苗庆
 * @version 1.0
 */
public class TemporaryClassTableServiceImpl implements TemporaryClassTableService {
              TemporaryClassTableDao  temporaryClassTableDao=new TemporaryClassTableDaolmpl();
              TakeACourseDao takeACourseDao=new TakeACoureDaolmpl();
              TeachersSchedulesDao teachersSchedulesDao=new TeachersSchedulesDaolmpl();
              TeacherDao teacherDao=new TeacherDaoImpl();
              CourseDao courseDao=new CourseDaolmpl();



    /**
     * 分页查询
     * @param pageNo  查询页码
     * @param pageSize  每页的记录数
     * @return
     */
    @Override
    public Page<TemporaryClassTable> page(int pageNo, int pageSize) {
        /**
         * 当前页码:pageNo
         * 总页码:pageTotal
         * 当前页显示的数量:pageSize
         * 总记录数:pageTotalCount
         * 当前页数据:items
         */

        //访问页面的记录条数的开始行数：当前页码-1*每页展示的记录行数
        int bigin=(pageNo-1)*pageSize;


        //总记录数量
        Integer pageTotalCount=temporaryClassTableDao.queryForPageTotalCount();

        //总页码数量=总记录数/每页记录显示数量，然后判断是否可以被除尽，如果不能除尽，那么总的页码数量就需要+1
        Integer pageTotal=pageTotalCount/pageSize;

        if (pageTotalCount%pageSize!=0){
            pageTotal++;
        }

        //当前页码数据
        List<TemporaryClassTable> items = temporaryClassTableDao.queryForPageItems(bigin, pageSize);

        ArrayList<Object> objects = new ArrayList<>();
        for (int i = 0; i <items.size() ; i++) {
            TemporaryClassTable temporaryClassTable = items.get(i);
        }


        Page<TemporaryClassTable> objectPage = new Page<TemporaryClassTable>(pageNo,pageTotal,pageSize,pageTotalCount,items);

        return objectPage;
    }



    /**
     * 分页展示的选课信息
     * @param pageNo 查询页码
     * @param pageSize 每页的记录数
     * @return
     *
     *
     * 业务逻辑思路：
     * 1.先使用分页查询，去获取临时选课班级表的数据
     * 2.将获取到的临时选课班级表的数据中的选课限制人数取出来添加到Tacshow对象的numberofpeople变量当中去。
     * 3.使用获取到的临时选课班级表的id去学生选课表中去查询有多少同学选择了这门课，统计其数量，将数量添加到Tacshow对象的numbertem变量当中去。
     * 4.将获取到的教师任课表id取出，然后去教师任课表中获取对应的教师id和课程id。
     * 5.在教师表中获取教师姓名，将教师姓名添加到Tacshow对象的teachername变量当中去。
     * 6.在课程表中获取课程编号、课程名称、课程学分、课程学时、并且将其依次添加到Tacshow对象的number、coursename、coursecredit、period当前中去
     * 7.将Tacshow对象放入到list表中去，将list表添加到Page对象中去，返回Page对象。
     */
    @Override
    public Page<TacShow> pageTeacher(int pageNo, int pageSize) {

        //用来装封装的TacShow对象
        List<TacShow> tacShows = new ArrayList<>();

        //1.使用分页查询临时选课表的信息
        Page<TemporaryClassTable> page = page(pageNo, pageSize);



        //将获取到的选课表信息进行循环
        for (int i = 0; i <page.getItems().size() ; i++) {
            TacShow tacShow = new TacShow();
            TemporaryClassTable temporaryClassTable = page.getItems().get(i);

            //2.获取到这门课的限制人数
            tacShow.setNumberofpeople(temporaryClassTable.getNumberofpeople());

            //3.统计这门课已经有多少人选择了
            TakeACourse takeACourse = new TakeACourse();
            takeACourse.setTemporaryclasstableid(temporaryClassTable.getTemporaryclasstableid());
            List<TakeACourse> takeACourses = takeACourseDao.queryBytemporaryclasstableId(takeACourse);
            //获取课程已经被多少学生选择了
            tacShow.setNumbertem(takeACourses.size());


            //4.用获得的教师任课表id来查询教师任课表来获取教师id和课程id
            TeachersSchedules teachersSchedules = new TeachersSchedules();
            teachersSchedules.setTeachersschedulesid(temporaryClassTable.getTeachersschedulesid());
            TeachersSchedules teachersSchedules1 = teachersSchedulesDao.queryById(teachersSchedules);
            //教师
            Teacher teacher = new Teacher();
            teacher.setTeacherid(teachersSchedules1.getTeacherid());
            //课程
            Course course = new Course();
            course.setCourseid(teachersSchedules1.getCourseid());

            //5.使用获得的教师表id查询教师表获取教师姓名
            Teacher teacher1 = teacherDao.queryById(teacher);
            //获取教师姓名
            tacShow.setTeachername(teacher1.getTeachername());

            //6.使用获得得课程id查询课程表获取课程编号、课程名称、课程学分、课程学时
            Course course1 = courseDao.queryById(course);
            //获取课程编号
            tacShow.setNumber(course1.getNumber());
            //获取课程名称
            tacShow.setCoursename(course1.getCoursename());
            //获取课程学分
            tacShow.setCoursecredit(course1.getCoursecredit());
            //获取课程学时
            tacShow.setPeriod(course1.getPeriod());

            //7.将Tacshow对象放入到list表中去
            tacShows.add(tacShow);
        }
          //8.将之前分页查询的数据全部放入到page1当中去，并且将list列表page.getItems中的数据直接替换成tacShows列表
        Page<TacShow> page1 = new Page<TacShow>(page.getPageNo(),page.getPageTotal(),page.getPageSize(),page.getPageTotalCount(),tacShows);
        return page1;
    }

}
